package com.icinfo.cloud.provider.punish.mapper;


import com.icinfo.cloud.provider.punish.actscode.vo.CaseAcsPublicInfoListVo;
import com.icinfo.cloud.provider.punish.actscode.vo.CaseActsCodeDocVo;
import com.icinfo.cloud.provider.punish.actscode.vo.CasePublicInfoListVo;
import com.icinfo.cloud.provider.punish.actscode.vo.CasePunishInfoListVo;
import com.icinfo.cloud.provider.punish.dto.CaseMainTaskQueryDto;
import com.icinfo.cloud.provider.punish.dto.SlightIllegalUnPunishPageRequest;
import com.icinfo.cloud.provider.punish.fastcase.vo.AppFastCaseRecordOfHandlingVo;
import com.icinfo.cloud.provider.punish.fastcase.vo.AppFastCaseRegisterTempVo;
import com.icinfo.cloud.provider.punish.ucase.casemain.model.CaseMainInfo;
import com.icinfo.cloud.provider.punish.vo.AssociatedTaskVo;
import com.icinfo.cloud.provider.punish.vo.CaseMainTaskVo;
import com.icinfo.cloud.provider.punish.vo.CaseOfSlightIllegalVo;
import com.icinfo.framework.mybatis.mapper.common.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

public interface CaseMainInfoMapper  extends Mapper<CaseMainInfo> {

    /**
     * 获取任务列表(代办及办结案件)
     *
     * @author: zhengqiang
     * @date: 2022/6/16
     * @param: queryDto
     * @return {@link List< CaseMainTaskVo>}
     **/
    List<CaseMainTaskVo> getCaseMainTaskList(CaseMainTaskQueryDto queryDto);

    /**
     * 描述： 查询待办数量
     *
     * @author: zhengqiang
     * @date: 2022/7/29
     * @param: queryDto
     * @return {@link int}
     **/
    int getCaseMainWaitTaskCount(CaseMainTaskQueryDto queryDto);

    /**
     * 描述： 根据用户查询暂存的简易处罚案件id
     *
     * @author: zhengqiang
     * @date: 2022/9/15
     * @param: orgCode
     * @param: userId
     * @return {@link List< String>}
     **/
    List<String> getTemporarySimpleCaseByUser(@Param("orgCode") String orgCode, @Param("userId") String userId);

    /**
     * 检查详情页面，获取行政处罚列表
     * @return
     */
    List<CasePunishInfoListVo> getPunishInfoList(@Param("caseActsCodeList") List<String> caseActsCodeList);

    /**
     * 查询案件的处罚决定书
     * @param caseId
     * @return
     */
    List<CasePublicInfoListVo> getCasePunishDocuments(@Param("caseId") String caseId);

    /**
     * 查询是否存在审批通过的决定书
     * @param caseId
     * @param partyId
     * @return
     */
    int selectApprovalJdsDocNum(@Param("caseId") String caseId, @Param("partyId") String partyId);

    /**
     * 查询是否存在审批通过的决定书
     * @param caseId
     * @param partyId
     * @return
     */
    int selectSendJdsDocNum(@Param("caseId") String caseId, @Param("partyId") String partyId);

    /**
     * 查询简易处罚决定书
     * @param caseId
     * @return
     */
    int selectJycfJdsDocNum(@Param("caseId") String caseId);

    /**
     * 获取送达决定书的送达时间
     * @param caseId
     * @param partyId
     * @return
     */
    LocalDateTime selectJdsDocSendTime(@Param("caseId") String caseId, @Param("partyId") String partyId);

    /**
     * 查询当前办案人员轻微违法不予处罚记录
     *
     * @param pageRequest
     * @return
     */
    List<CaseOfSlightIllegalVo> getSlightIllegalUnPunishCaseList(SlightIllegalUnPunishPageRequest pageRequest);

    /**
     * 根据当事人身份编码查询进行中的速结案件记录
     *
     * @param partyIdentityCode
     * @return
     */
    List<AppFastCaseRecordOfHandlingVo> selectFastCaseRecordListOfHandlingByParty(@Param("partyIdentityCode") String partyIdentityCode);
    /**
     * 查询需要送达的文书信息
     */
    List<CaseActsCodeDocVo> getNeedSentDocuments(@Param("caseId") String caseId);

    /**
     * 查询简易程序的文书信息
     */
    List<CaseActsCodeDocVo> getNoNeedSentDocuments(@Param("caseId") String caseId);

    /**
     * 根据文书编码,当事人id查询案件的文书
     * @param caseId 案件id
     * @param documentKindCodes 文书编码
     * @param currentUserPartyIdList 当事人id
     * @return
     */
    List<CaseAcsPublicInfoListVo> getCasePunishDocumentsByDocCode(@Param("caseId") String caseId, @Param("documentKindCodes")List<String> documentKindCodes, @Param("currentUserPartyIdList") List<String> currentUserPartyIdList );


    /**
     * 根据文书类型编码,当事人id查询案件的文书
     * @param caseId 案件id
     * @param documentKindCodes 文书编码
     * @param partyId 当事人id
     * @return
     */
    List<CaseAcsPublicInfoListVo> getCaseDocByKindCodeAndPartyId(@Param("caseId") String caseId, @Param("documentKindCodes")List<String> documentKindCodes, @Param("partyId") String partyId );

    /**
     * 【V1.12.1】描述： 根据用户查询简案快办最新的一条暂存数据
     *
     * @param userId
     * @param orgCode
     * @return
     */
    AppFastCaseRegisterTempVo selectFastRegisterTempByUser(@Param("userId") String userId, @Param("orgCode") String orgCode);


    /**
     * 我的案源列表
     */
    List<AssociatedTaskVo> myCaseMainTaskList(@Param("handlePersonId") String handlePersonId
            , @Param("caseCurrentStageCode")String caseCurrentStageCode
            , @Param("caseType")String caseType
            , @Param("partyNameOrCaseReason")String partyNameOrCaseReason);

}
